//package com.github.prontera.service;
//
//import java.io.IOException;
//import java.sql.Timestamp;
//import java.time.OffsetDateTime;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Set;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import com.github.prontera.Shift;
//import com.github.prontera.StatusCode;
//import com.github.prontera.common.mapper.JsonMapper;
//import com.github.prontera.common.redis.RedisTemplate;
//import com.github.prontera.domain.Client;
//import com.github.prontera.domain.Coterie;
//
//import redis.clients.jedis.GeoRadiusResponse;
//
//@Component
//public class CacheService {
//
//	private static final Logger LOGGER = LoggerFactory.getLogger(ClientCoterieService.class);
//
//	private static final String ALL_COTERIE_KEY = "ALL_COTERIE_KEY";
//	private static final String SET_COTERIE_KEY = "SET_COTERIE_KEY|";
//	private static final String GEO_KEY = "GEO_KEY";
//	private static final Integer GEEO_QUERY_RADIUS = 10000;
//
//	@Autowired
//	private CoterieService coterieService;
//	@Autowired
//	private ClientService clientService;
//	@Autowired
//	private RedisTemplate redisTemplate;
//
//	/**
//	 * 加载全部圈子数据
//	 */
//	public void initLoadingCoterie() {
//		Coterie coterie = new Coterie();
//		// 全部圈子
//		List<Coterie> coterieList = coterieService.findCoterie(coterie);
//		long removeCount = redisTemplate.del(ALL_COTERIE_KEY);
//		LOGGER.debug("清空key[" + ALL_COTERIE_KEY + "]共计[" + removeCount + "]全部数据");
//		for (Coterie coterieObj : coterieList) {
//			insertCoterie(coterieObj);
//		}
//	}
//	
//	public void loadClient() {
//		long removeCount = redisTemplate.del(GEO_KEY);
//		LOGGER.debug("清空key[" + GEO_KEY + "]共计[" + removeCount + "]全部数据");
//		Client findClient = new Client();
//		findClient.setPageIndex(1);
//		findClient.setPageSize(Integer.MAX_VALUE);
//		List<Client> clients = clientService.findLocationClient(findClient);
//		for (Client client : clients) {
//			addClient(client,null);
//		}
//	}
//	
//	public void clearClient() {
//		long removeCount = redisTemplate.del(GEO_KEY);
//		LOGGER.debug("清空key[" + ALL_COTERIE_KEY + "]共计[" + removeCount + "]全部数据");
//	}
//	
//	public void addClient(Client client,Client oldClient) {
//		if(oldClient!=null){
//			System.out.println("---------zrem--------"+ JsonMapper.nonDefaultMapper().toJson(oldClient));
//			redisTemplate.zrem(GEO_KEY, JsonMapper.nonDefaultMapper().toJson(oldClient));
//		}
//		Client insertClient = new Client();
//		insertClient.setHeadImage(client.getHeadImage());
//		insertClient.setRents(client.getRents());
//		insertClient.setGender(client.getGender());
//		insertClient.setNickname(client.getNickname());
//		insertClient.setId(client.getId());
//		redisTemplate.geoadd(GEO_KEY, client.getPointLat(), client.getPointLog(), 10, JsonMapper.nonDefaultMapper().toJson(insertClient));
//	}
//
//	public List<Client> queryClient(Long clientId,Double queryLon, Double queryLat, Integer limitStart, Integer limitEnd) {
//		limitEnd=limitStart+limitEnd;
//		List<Client> clients = new ArrayList<Client>();
//		List<GeoRadiusResponse> nearHashes = redisTemplate.georadius(GEO_KEY, queryLon, queryLat, limitEnd, GEEO_QUERY_RADIUS);
//		if(nearHashes==null){
//			return clients;
//		}
//		if(limitEnd>nearHashes.size()){
//			limitEnd=nearHashes.size();
//		}
//		for (int i = (limitStart); i < limitEnd; i++) {
//			GeoRadiusResponse hash = nearHashes.get(i);
//			String data = redisTemplate.get(hash.getMemberByString());
//			Client client = JsonMapper.nonDefaultMapper().fromJson(data, Client.class);
//			client.setRadius(hash.getDistance());
//			//排除自己得
//			if(clientId!=null&&client.getId()!=null&&client.getId().longValue()==clientId.longValue()){
//				continue;
//			}
//			clients.add(client);
//		}
//		return clients;
//	}
//
//	/**
//	 * 加载圈子数据
//	 */
//	public void insertCoterie(final Coterie coterie) {
//		if (coterie == null) {
//			Shift.fatal(StatusCode.INVALID_PARAMS_CONVERSION, "参数错误!");
//		}
//		redisTemplate.zadd(ALL_COTERIE_KEY,
//				Double.parseDouble(Timestamp.from(coterie.getCreateTime().toInstant()).getTime() + String.format("%019d", coterie.getClientId())),
//				String.valueOf(coterie.getId()));
//		// 初始化Comment数据 Hash
//		redisTemplate.hset(SET_COTERIE_KEY, String.valueOf(coterie.getId()), coterie.toString());
//	}
//
//	/**
//	 * 删除圈子数据
//	 */
//	public void removeCoterie(final Coterie coterie) {
//		if (coterie == null) {
//			Shift.fatal(StatusCode.INVALID_PARAMS_CONVERSION, "参数错误!");
//		}
//		redisTemplate.zrem(ALL_COTERIE_KEY, coterie.toString());
//		redisTemplate.hdel(SET_COTERIE_KEY, String.valueOf(coterie.getId()));
//	}
//
//	/**
//	 * 加载圈子数据
//	 */
//	public List<Coterie> findCoterie(final OffsetDateTime time, final int offset, final int count) {
//		Set<String> sets = redisTemplate.zrangeByScore(ALL_COTERIE_KEY, 0D, 1511326957012D, 1, 2);
//		if (sets == null || sets.size() == 0) {
//			return null;
//		}
//		List<String> data = redisTemplate.hmget(ALL_COTERIE_KEY, sets.toArray(new String[0]));
//		try {
//			return JsonMapper.nonDefaultMapper().fromJson(data.toString(), List.class, Coterie.class);
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//	/**
//	 * 加载圈子数据
//	 */
//	public List<Coterie> findCoterie(final long clientId, final OffsetDateTime time, final int offset, final int count) {
//		Set<String> sets = redisTemplate.zrangeByScore(ALL_COTERIE_KEY, 0D, 1511326957012D, 1, 2);
//		if (sets == null || sets.size() == 0) {
//			return null;
//		}
//		List<String> data = redisTemplate.hmget(SET_COTERIE_KEY, sets.toArray(new String[0]));
//		try {
//			return JsonMapper.nonDefaultMapper().fromJson(data.toString(), List.class, Coterie.class);
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//}
